package com.tinem.platform.service.data.utils;

import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.tinem.platform.module.pojo.vo.data.TranslateInfo;
import com.tinem.platform.service.data.config.LanguageMapping;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: platform
 * @description: ${description}
 * @author: eden#can
 * @Slogan: 没有所谓失败，除非你不再尝试
 * @date: 2022-01-09 22:23
 **/
@Slf4j
@Component
public class TransUtil {


    @Value("${baidufanyi.app_id}")
    String appId;
    @Value("${baidufanyi.app_secret}")
    String securityKey;
    @Value("${baidufanyi.url}")
    String transApiHost;

    public JSONArray getTransResult(String query, String from, String to) {
        Map<String, Object> params = buildParams(query, from, to);

        String responseStr = HttpGet.get(transApiHost, params);

        log.info("baidu fanyi, responseStr:{}",responseStr);
        if(StrUtil.isBlank(responseStr)){
            log.error("response.body is blank!");
            return null;
        }
        JSONObject jsonObject = JSONUtil.parseObj(responseStr);

        // 错误码 仅当出现错误时显示
        if (jsonObject.containsKey("error_code")) {
            log.error("response containsKey error_code:{}",jsonObject);
            return null;
        }

        JSONArray transResult = jsonObject.getJSONArray("trans_result");


        return transResult;
    }

    private Map<String, Object> buildParams(String query, String from, String to) {

        String tarlan = LanguageMapping.baiduFanyiMapping(to);

        Map<String, Object> params = new HashMap();
        params.put("q", query);
        params.put("from", "auto");
        params.put("to", tarlan);

        params.put("appid", appId);

        // 随机数
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("salt", salt);

        // 签名
        // 加密前的原文
        String src = appId + query + salt + securityKey;
        params.put("sign", MD5.md5(src));

        return params;
    }




//    public JSONArray getTransResult(String query, String from, String to) {
//
//        String tarlan = LanguageMapping.baiduFanyiMapping(to);
//
//        String buildUrl = buildUrl(query, from, tarlan);
//
//        HttpResponse response = HttpRequest.get(buildUrl).execute();
//
//        log.info("baidu fanyi api res:{}", JSONUtil.toJsonStr(response));
//        // 判断调用是否成功
//        if (!response.isOk()) {
//            log.error("response is not ok!");
//            return null;
//        }
//
//        String result = response.body();
//        if(StrUtil.isBlank(response.body())){
//            log.error("response.body is blank!");
//            return null;
//        }
//        JSONObject jsonObject = JSONUtil.parseObj(result);
//
//        // 错误码 仅当出现错误时显示
//        if (jsonObject.containsKey("error_code")) {
//            log.error("response containsKey error_code:{}",jsonObject);
//            return null;
//        }
//
//        JSONArray transResult = jsonObject.getJSONArray("trans_result");
//
//
//        return transResult;
//    }
//
//    private String buildUrl(String queryTxt, String from, String tarlan) {
//        // 以当前时间戳作为随机数
//        String salt = String.valueOf(System.currentTimeMillis());
//        // 根据参数生成对应的签名
//        String signStr = StrUtil.format("{}{}{}{}", appId, queryTxt, salt, securityKey);
//        String sign = SecureUtil.md5(signStr);
//
//        String urlTmp = transApiHost + "?q={}&from={}&to={}&appid={}&salt={}&sign={}";
//        String buildUrl = StrUtil.format(urlTmp,encode(queryTxt),encode("auto"),encode(tarlan),encode(appId),encode(salt),encode(sign));
//
//        log.info("baidu fanyi api req url:{}",buildUrl);
//
//        return buildUrl;
//    }




//    public static void main(String[] args) {
//
//        String query = "Cuando+";
//
//        String str = StrUtil.str(query, "utf-8");
//
//
//        Map<String, Object> params = new HashMap();
//        params.put("q", query);
//        params.put("from", "auto");
//        params.put("to", "zh");
//
//        params.put("appid", "20190515000298029");
//
//        // 随机数
//        String salt = String.valueOf(System.currentTimeMillis());
//        params.put("salt", salt);
//
//        // 签名
//        // 加密前的原文
//        String src = "20190515000298029" + query + salt + "zAc8jOeNuhp6JHeo60AI";
//        params.put("sign", SecureUtil.md5(src));
//
//        String s1 = HttpGet.get("http://fanyi-api.baidu.com/api/trans/vip/translate", params);
//
//
//        String buildUrl = getUrlWithQueryString("http://fanyi-api.baidu.com/api/trans/vip/translate", params);
//
//        System.out.println(buildUrl);
//
//
//        String s = HttpUtil.get(buildUrl);
//
//        HttpResponse response = HttpRequest.get(buildUrl).execute();
//
//        // 判断调用是否成功
//        if (!response.isOk()) {
//            log.error("response is not ok!");
//
//        }
//
//        String result = response.body();
//
//        System.out.println(result);
//
//
//    }



}
